package com.xnj.file_byte_stream_demo;

import java.io.FileInputStream;
import java.io.IOException;

// 使用FileInputStream每次读取多个字节
public class FileInputStreamTest2 {
    public static void main(String[] args) throws IOException {
        // 创建一个字节输入流管道和源文件接通  文件内容为：abc66
        FileInputStream is = new FileInputStream("src/bb.txt");

        // 创建一个缓存数组
        byte [] buffer = new byte[3];

        // public int read(byte[] b) 读取多个字节，将字节数组作为参数传入，返回读取的字节数
        // 方式1：
        int len = is.read(buffer);
        System.out.println("第一次读了:"+ len + "个字节"); // 3
        System.out.println(new String(buffer)); // abc

//        int len2 = is.read(buffer);
//        System.out.println("第二次读了:"+ len2 + "个字节"); // 2
//        System.out.println(new String(buffer)); // 66c


         /*
         问题：
            因为每次读取到的字节放入缓存字节数组中覆盖上次的内容，
            如果最后一处读取的长度小于缓存数组的长度，那么内容无法完全覆盖上次的内容
         解决办法：
            读多少取多少
            new String(byte[] b, int off, int len)
         */


        // 优化如下
        // 方式二：都多少，取多少
        int len2 = is.read(buffer);
        System.out.println("第二次读了:"+ len2 + "个字节"); // 2
        System.out.println(new String(buffer, 0, len2)); // 66


        // 测试：如果文件已经读取完毕，再次读取，返回-1
        int len3 = is.read(buffer);
        System.out.println(len3);

        is.close();
    }
}
